//
// AModule.hh for caziac
// 
// Made by johannick renaud
// Login   <renaud_j@epitech.net>
// 
// Started on  Mon Sep  5 03:02:31 2011 johannick renaud
//

#ifndef			CAZIAC_AMODULE_HH
# define		CAZIAC_AMODULE_HH

/**
 *	\file		AModule.hh
 *	\date		Mon Sep  5 2011
 *	\author		RENAUD J.
 *	\version	1.0
 */

#include		<list>
#include		<string>

#include		"IProcess.hh"

namespace		Caziac
{
  namespace		Module
  {
    /**
     *	\class		AModule
     *	\brief		Abstract class for a module
     */

    class		Module
    {

      std::string			_name;

    protected:

      std::list<IProcess *>		processes_;

    public:

      Module(std::string const &name);
      virtual	~Module(){}

      std::list<IProcess *>&		getProcesses();
      std::string			getName() const;

    };
  }
}

/**
 *	\def	EXPORT
 *	demangling define for architecture compatibility
 */

#ifdef	_WIN32
 #define	EXPORT		extern "C" __declspec(dllexport)
#else
 #define	EXPORT		extern "C"
#endif

/**
 *	\brief		[User Implementation] Entry Point for a module
 *
 */

EXPORT	Caziac::Module::Module *	getModule();

#endif
